iT邦幫忙

2021 iThome 鐵人賽

DAY 19
0
自我挑戰組

用unity製作2DRPG雛形-沒有大野狼的小紅帽系列 第 19

19.unity實例化(下)(Random、迴圈、Prefab)

  • 分享至 

  • xImage
  •  

今天要讓蘋果自己隨機分布在地圖上面,生成座標不要一個一個設置,數量也可以自己決定。
所以要借用Random和迴圈來幫忙。

Random.Range (參考unity手冊)

事實上,仍然要給Instantiate一個座標,只是座標的參數使用隨機變數。

//宣告
public static float Range(float minInclusive, float maxInclusive);
//實際用法
Random.Range(x1, x2) //直接取代 float 浮點數的地方

實際用法

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class InstantiateApple : MonoBehaviour
{   
		[Header("物件/父物件")]
    //宣告要生成的物件
    public GameObject apple;
    //宣告生成物件的父物件
    public Transform appleClass;
    
		[Space(10)]
    [Header("蘋果數量/隨機生成區域")]
    public int AmountOfApple;    
    public float x1, x2, y1, y2;      //隨機生成座標的range
                   
    void Start()
    {   
        SpawnApple();

    }
    private void SpawnApple()
    {       //用迴圈反覆執行
            for (int i = AmountOfApple; i >= 0; i--)
            Instantiate(apple, new Vector3(Random.Range(x1, x2), Random.Range(y1, y2),0.0f), Quaternion.identity,appleClass); 
            //立即生成物件(物件,位置,角度,父物件);
    }

}

小補充:unity引擎內變數整理的方法

[Header("")]  //可以在變數間寫上標題
[Space()]     //可以在變數之間留空格 //標題不能

變數輸入

改好腳本之後輸入要生成的範圍座標區間。
蘋果數量15個,範圍隨便抓兩個點,執行後蘋果會在這兩個點構成的方形中隨機生成。
00.png
也可以直接抓到大地圖,如果蘋果卡在牆壁或障礙物,可以利用碰撞偵測清除。

執行結果

不過這裡有個小問題

蘋果會比決定的15個多1個,地圖上總共有16個蘋果,多原本的蘋果物件。
01.png

預製體Prefab

解決上述問題的方法就是把蘋果設置呈預製體。

預製體可以不用一開始就生成物件,但是檔案內容包含物件所需要的東西,直到程式使用Instantiate()將預製體實例化,才會將該物件生成於場景中。
也就是說,在Instantiate()之前,蘋果都是不存在場景中的。
很適合拿來做子彈,可以經歷事件才生成,碰撞後破壞。

1.製作預製體,將物件拖曳至資料夾Asset(可以自訂)
1.png

2.在階層中會看到藍色物件,表示為預製體物件
2.png

3.導入腳本

可以將階層中的預製體刪掉,然後從資料夾Asset中將預製體物件拖曳至腳本物件
3.png

4.執行結果

場景中已無蘋果
4.png

隨機生成數量正確的蘋果
5.png


上一篇
18.unity實例化(上)(Instantiate)
下一篇
20.unity換場景
系列文
用unity製作2DRPG雛形-沒有大野狼的小紅帽30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言